// coding: utf-8
// @Author : lryself
// @Date : 2020/10/20 16:55
// @Software: GoLand

package main

import (
	"fmt"
	"go_learning/src/utils"
)

func main() {
	e1 := reorderList
	utils.DecoratorExample(&e1,reorderList)
	l := &ListNode{Val: 1, Next: &ListNode{Val: 2,Next: &ListNode{Val: 3,Next: &ListNode{Val: 4}}}}
	e1(l)
	for l!=nil{
		fmt.Print(l.Val)
		l=l.Next
	}
}

type ListNode struct {
    Val int
    Next *ListNode
}

func reorderList(head *ListNode)  {
	var p *ListNode
	var n int
	for p=head;p!=nil;p=p.Next{
		n++
	}
	if n==0 || n==1{
		return
	}
	p=head
	for p!=nil&&p.Next!=nil{
		if n%2 == 0{
			if p.Next.Next==nil{
				return
			}
		}
		p1:=head
		for j:=0;j<n-2;j++{
			p1=p1.Next
		}
		p2:=p.Next
		p.Next=p1.Next
		p1.Next=p1.Next.Next
		p.Next.Next=p2
		p=p.Next.Next
	}
}